Jackal (USA).NES Level Editor
Author: RayofJay
Date: 25-Jan-2020
******
*********
************
READ EVERYTHING. YOU MAY CORRUPT THE ROM IF YOU USE THE LEVEL EDITOR INCORRECTLY
************
*********
******
These help files reside at %OS_DRIVE%\TEMP\Jackal Level Editor.
Delete it when you're done, if you wish - it is not a large file
VERSION:
1.0 - Initial Release
2.6 - Corrected some resolution issues between varying OSs
2.7.1 - More resolution corrections. Moved some things around on teh form to be mroe user friendly and make better use of space
Added optional grid overlay for the level layout
2.7.2 - Corrected a bug that prevented the arrows from working after clicking the Level Grid option.
Added Offset functionality that allows the objects/events to visibly line up a lot better with the level tiles
2.8 - A lot of changes.
Added Menu (File - Save, Save As, and Open. Help (this help file). CTRL-S, CTRL-SHIFT-S, CTRL-) respectively
Selecting an event will scroll the level so this event is as close to centered (vertically) as possible. The event will also be highlighted (a surrounding box) in both the level and the event list
Explicit hardcode was added to prevent any event from being placed on the 1st screen of level 1. The ROM is designed to not contain any events here and addiving an event will corrupt the ROM.
The 'Selection' text is updated to indicate whether a tile or an event has been selected
X and Y coordinates are displayed real-time as the event is moved around the level
Messages are displayed when the events Y value is Odd (this means it will only spawn when the combined players' main weapon power is 3 or greater), and for Spawning at the bottom of the screen - this can be very annoying and difficult to debug if your event isn't spawning where you expect.
2.9.1 - Major bug fix, efficiency corrections, esthetics update, and more options
The editor previously allowed the user to place events between EF and FF (inclusive). This would corrupt the ROM, so the editor now forbids this.
when clicking in this EF-FF area to place events, nothing happens. When you use the arrow keys, the event will skip this section
The entire level loaded twice when the radio button was clicked. This was fixed.
Added an option to gray out the section of the screen that would never be loaded in the real game.
Clicking to place an event did not update the 'Selection' position or 'Spawn at bottom' or 'Odd Y' messages.
Resized the form a little, and streamlined the code a little.
Introduction
Reference the accompanying Jackal Memory Usage.xlsx (in the documents repository/section of RHDN) file for Jackal information regarding
1. The layout of RAM
2. The dissection of the ROM (data tables, game logic, intent, modifications, etc.)
3. Level Data
4. Sprite Data
5. AI Logic/Times
This Editor provides provides access to all the levels':
1. Tile layouts (Level design). The tile graphics and collision are not editable
2. palettes
3. helipad flashing lights palettes and screen start/stop triggers for flashing palettes
4. Event spawn locations
5. Event types (what event spawns where)
Jackal Level Editor
(1) File Menu
FILE: provides Open (CTRL-O), Save (CTRL-S), and Save As (CTRL-SHIFT-S) standard function
Save will OVERWRITE the ROM that was opened. HELP: This help file
(2) Level Layout
The level layout shows the entire level. Each level is 512 pixels wide (2 screens worth).
Levels 1-5 are 12 screens tall. Level 6 is 14 screens tall.
The tiles are defined as 32x32 pixel sections. The available tiles for each level are displayed in (4)
Since the NES resolution is 256x240, The level layout displays horizontal black lines where tiles are chopped off to fit in the 240 vertical resolution.
The very bottom row of each level has 24 pixels removed instead of just 16.
User Operation
Once a tile is chosen in (4) (LEFT or RIGHT click), LEFT click to overwrite the level layout
Hold down the LEFT mouse button and drag to overwrite many level tiles with the same tile multiple times
RIGHT click to select the tile under the cursor for placement elsewhere
The mouse wheel is tied to to the level layout and will scroll through the level
(3) Level Select
Click to choose what level to display/edit
(4) Tile Select
All the level's available tiles are shown here. These tiles are rendered straight from the graphics data in the ROM with palettes applied. (i.e. the image is not stored anywhere, but built every time)
User Operation
LEFT or RIGHT click to select a tile. It will appear in (6).
(5) Enemy Spawn Layout
This shows the order in which enemies spawn (Top Left first, by rows, then top to bottom).
Hover the mouse over the picture and it will display information about the enemy (Internal ID, (X,Y) spawn position, and screen top or bottom spawn)
The horizontal position is the distance in pixels from the leftmost level edge divided by 4 (Spawn position in pixels = X*4)
The Y position is in pixels
A horizontal position 0-7F spawns at the top of the screen.
A horizontal position 80-FF spawns at the bottom of the screen
(The editor handles this behind the scenes. LEFT click an event and change the radio button to change top/bottom spawning per event.)
A few enemies change behaviour based on whether they spawn at the top or bottom. (Enemies like the bomber plane and enemy helicopter change movement direction. Events like the allied helicopter fly-by MUST spawn at the bottom. Events like tanks can spawn at either) The 'salmon/pink' back color of the event is made transparent when rendered on the Level layout
User Operation
To move an enemy position around, RIGHT click the enemy and it will appear in (6). now you may LEFT click the Level Layout and move the enemy around (RIGHT click selects a tile pattern).
To edit the enemy, LEFT click the enemy in (4).
After an enemy is select, you may use the Arrow keys to move the enemy around for finer detail.
(Use SHIFT+Arrow key to move large distances at a time)
Notes
Events on the level with a vertical position between #EF and #FF, inclusive (i.e. 0EF-0FF,...,9EF-9FF,...,etc.) will either CORRUPT the ROM or not spawn
The editor does not allow you to place events here. Clicking to place an event does nothing. Using the arrows will skip over this section of a screen.
(to be clear, each level must maintain the same number of special events so that the byte count is the same. The special events can be moved around, but not removed)
These 3 special events consume 2 bytes, whereas normal events consume 3 bytes of space
EF marks the end of the screen. These special events are displayed with F0,F1,F2 graphics on the level layout.
F0 triggers the screen scroll for initiating the level's boss battle (hitting the actual boss load trigger will cause the screen to scroll to the end of the level)
F1 reloads the original level's BG and sprite palettes
F2 Sometimes sets the sprite palette data to something new (e.g. Level 1 boss updates sprite data, though there's no real color change),
sometimes, F2 also upates graphic data (BG and/or Sprite graphics). level specific
Enemies despawn once (RAM)070X=1 and (RAM)056X=40 (056X increments as you move upward). For the boss screen, make sure enemies are beneath vertical position #A4. Otherwise, they will remain in memory during the boss fight, consuming a RAM event slot (Jackal has only 16 slots, so they're precious!)
IF YOU ARE EDITING MY ROM HACK - Jackal 2, HORIZONTAL POSITIONS 7D,7E,7F HAVE SPECIAL MEANING
7D reads from the RNG RAM register 001A and randomnly places the enemy between 00-3F horizontally. This is somewhere on the left half of the level. vertical is unaffected
7E reads from the RNG RAM register 001A and randomnly places the enemy between 20-5F horizontally. This is somewhere in the middle 50% of the level. vertical is unaffected
7F reads from the RNG RAM register 001A and randomnly places the enemy between 40-7F horizontally. This is somewhere on the right half of the level. vertical is unaffected
(6) Selection
This shows what Tile/Event is currently selected for editing/placement.
The text will update to indicate whether a tile or event is actively being edited
(7)Spawn At Bottom Message
When an event is selected, this message will appear if the event is set to spawn at the bottom of the screen
(8) Odd Vertical Spawn Message
Whan an event is selected, this message will appear if the Y spawn location is Odd. Vertical enemy spawn positions that are odd only actually spawn if both players have upgraded weaponry. Specifically, if the combined upgrade total is >= 3.
(e.g. One player may have a full bazooka and the other play only a grenade (or no second player at all, or one player has a Level 1 Bazooka and player 2 has a Level 2 bazooka (or higher), etc.)
This allows the designer to make a level harder if the player is better at playing the game. This is a default game feature.
(9) Options
Level Grid Lines: Checking this check box will over layout a green mesh/grid showing the break between tiles
Gray Out Unused Section of Screen: This will completely gray out the portion of the background tiles that you will never see.
This is due to the 256x240 NES resolution and the fact that the background tiles are 32x32 pixels.
(10) Palette
Gives access to edit each level's color palettes. You'll have to experiment to see what tiles use what palettes.
Some levels have an F2 object. This might load new graphics and sometimes a new palette (BG or sprite). usually used for bosses.
If a level has an F2 object that affects a levels palette, these F2 palettes will appear in this section for modification
(11) Helipad Flashing Palette Update
Gives access to edit the helipad flashing palette update colors. Levels 1,2,3,4,6 use the first palette set (0-3) for the helipad lights. Level 5 uses the second palette set (4-7).
If you are editing my Jackal 2 hack, then you'll notice the helipad palette only displays 4 colors instaed of 16. This is because the helipad palette update alawys just has one set of 4 colors that are different.
I changed the data tables to only update the colors that were different, saving a little bit of space (The Jackal ROM is very full!).
(12) Screen Flash
Defines the start and stop screen for the helipad light flashing palette update (i.e. a value of 7 and 9 changes the palette to the helipad palette set when screen 7 is reached
and reverts the palette back to the normal level colors when screen 9 is reached. I use F and F to turn off the palette update (This can be useful, for instance, on Level 1 where the
helipad lights and the water tiles use the same palette. If the helipad lights flash while water is on the screen...the water flashes too))
Other
The level editor will detect unsaved changes and prompt you before exiting without saving.
ALT+F4 closes the application as usual
You may contact me at:
jpetheman@hotmail.com